package proyecto.ort.edu.uy.dao.impl;

import java.util.List;

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

import proyecto.ort.edu.uy.dao.TareaDAOInterface;
import proyecto.ort.edu.uy.dominio.AreaDeTrabajo;
import proyecto.ort.edu.uy.dominio.Prioridad;
import proyecto.ort.edu.uy.dominio.Tarea;
import proyecto.ort.edu.uy.dominio.Usuario;

@Stateless
public class TareaDAOImpl implements TareaDAOInterface {

	/**
	 * 
	 */
	@PersistenceContext(unitName = "PrototipoEM")
	private EntityManager em;

	private static final long serialVersionUID = -8092420489242119482L;

	@Override
	public List<AreaDeTrabajo> obtenerAreasDeTrabajoEmpresa(Usuario usuarioLogueado) {

		String sql = "Select a.lstAreaDeTrabajo from Empresa a where a.idEmpresa = :idEmpresa";
		Query query = this.em.createQuery(sql);

		query.setParameter("idEmpresa", usuarioLogueado.getEmpresa().getIdEmpresa());

		List<AreaDeTrabajo> lstAreaTrabajo = query.getResultList();

		return lstAreaTrabajo;
	}

	@Override
	public void guardar(Tarea tarea) {
		this.em.persist(tarea);
	}

	@Override
	public Tarea buscarPorId(Long idTarea) {
		Tarea tarea = this.em.find(Tarea.class, idTarea);
		return tarea;
	}

	@Override
	public List<Tarea> obteneTareasADT(Usuario usuarioLogueado, AreaDeTrabajo area) {
		String sql = "Select a.lstTarea from Empresa a where a.idEmpresa = :idEmpresa";
		Query query = this.em.createQuery(sql);

		query.setParameter("idEmpresa", usuarioLogueado.getEmpresa().getIdEmpresa());

		List<Tarea> lstTarea = query.getResultList();

		return lstTarea;
	}

	@Override
	public List<Prioridad> obtenerListaPrioridades() {

		String sql = "select p from Prioridad p";
		Query query = this.em.createQuery(sql);

		List<Prioridad> lstPrioridades = query.getResultList();
		return lstPrioridades;
	}

	@Override
	public List<Tarea> obtenerTareasDeEmpresa(Usuario usuario) {
		// String sql =
		// "select t from Tarea t where t.areaTrabajo exists in (select adt from AreaDeTrabajo adt where adt.empresa = :empresa)";
		String sql = "select adt.lstTareas from AreaDeTrabajo adt Where adt.empresa = :empresa";
		Query query = this.em.createQuery(sql);

		query.setParameter("empresa", usuario.getEmpresa());

		List<Tarea> lstTarea = query.getResultList();

		return lstTarea;
	}

	@Override
	public Prioridad obtenerPrioridadTarea(Integer codigo) {
		Prioridad prioridad = this.em.find(Prioridad.class, codigo);
		return prioridad;
	}

	@Override
	public void actualizarTarea(Tarea tarea) {
		this.em.merge(tarea);
	}

}
